{"cells": [{"cell_type": "markdown", "metadata": {"slideshow": {"slide_type": "slide"}}, "source": ["# Part 2 - Introduction to NumPy"]}, {"cell_type": "markdown", "metadata": {}, "source": ["<img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/3/31/NumPy_logo_2020.svg/512px-NumPy_logo_2020.svg.png\">"]}, {"cell_type": "markdown", "metadata": {"toc": true}, "source": ["<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n", "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Introduction-to-NumPy\" data-toc-modified-id=\"Introduction-to-NumPy-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Introduction to NumPy</a></span><ul class=\"toc-item\"><li><span><a href=\"#Installation-and-Import\" data-toc-modified-id=\"Installation-and-Import-1.1\"><span class=\"toc-item-num\">1.1&nbsp;&nbsp;</span>Installation and Import</a></span></li></ul></li><li><span><a href=\"#Creating-Arrays\" data-toc-modified-id=\"Creating-Arrays-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Creating Arrays</a></span><ul class=\"toc-item\"><li><span><a href=\"#Creating-N-dimensional-Array\" data-toc-modified-id=\"Creating-N-dimensional-Array-2.1\"><span class=\"toc-item-num\">2.1&nbsp;&nbsp;</span>Creating N-dimensional Array</a></span><ul class=\"toc-item\"><li><span><a href=\"#Creating-arrays-using-random-number-generator\" data-toc-modified-id=\"Creating-arrays-using-random-number-generator-2.1.1\"><span class=\"toc-item-num\">2.1.1&nbsp;&nbsp;</span>Creating arrays using random number generator</a></span></li></ul></li><li><span><a href=\"#Attibutes-of-a-NumPy-Array\" data-toc-modified-id=\"Attibutes-of-a-NumPy-Array-2.2\"><span class=\"toc-item-num\">2.2&nbsp;&nbsp;</span>Attibutes of a NumPy Array</a></span></li></ul></li><li><span><a href=\"#Navigating-Arrays\" data-toc-modified-id=\"Navigating-Arrays-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Navigating Arrays</a></span><ul class=\"toc-item\"><li><span><a href=\"#Array-Indexing---Accessing-Single-Elements\" data-toc-modified-id=\"Array-Indexing---Accessing-Single-Elements-3.1\"><span class=\"toc-item-num\">3.1&nbsp;&nbsp;</span>Array Indexing - Accessing Single Elements</a></span><ul class=\"toc-item\"><li><span><a href=\"#One-dimensional-Array\" data-toc-modified-id=\"One-dimensional-Array-3.1.1\"><span class=\"toc-item-num\">3.1.1&nbsp;&nbsp;</span>One-dimensional Array</a></span></li><li><span><a href=\"#Multi-dimensional-Array\" data-toc-modified-id=\"Multi-dimensional-Array-3.1.2\"><span class=\"toc-item-num\">3.1.2&nbsp;&nbsp;</span>Multi-dimensional Array</a></span></li></ul></li><li><span><a href=\"#Array-Slicing\" data-toc-modified-id=\"Array-Slicing-3.2\"><span class=\"toc-item-num\">3.2&nbsp;&nbsp;</span>Array Slicing</a></span><ul class=\"toc-item\"><li><span><a href=\"#One-dimensional-Array\" data-toc-modified-id=\"One-dimensional-Array-3.2.1\"><span class=\"toc-item-num\">3.2.1&nbsp;&nbsp;</span>One-dimensional Array</a></span></li><li><span><a href=\"#Multi-dimensional-Array\" data-toc-modified-id=\"Multi-dimensional-Array-3.2.2\"><span class=\"toc-item-num\">3.2.2&nbsp;&nbsp;</span>Multi-dimensional Array</a></span></li></ul></li><li><span><a href=\"#Reshaping-Arrays\" data-toc-modified-id=\"Reshaping-Arrays-3.3\"><span class=\"toc-item-num\">3.3&nbsp;&nbsp;</span>Reshaping Arrays</a></span><ul class=\"toc-item\"><li><span><a href=\"#One-dimensional-Array\" data-toc-modified-id=\"One-dimensional-Array-3.3.1\"><span class=\"toc-item-num\">3.3.1&nbsp;&nbsp;</span>One-dimensional Array</a></span></li><li><span><a href=\"#Multi-dimensional-Array\" data-toc-modified-id=\"Multi-dimensional-Array-3.3.2\"><span class=\"toc-item-num\">3.3.2&nbsp;&nbsp;</span>Multi-dimensional Array</a></span></li><li><span><a href=\"#Transposing-an-Array\" data-toc-modified-id=\"Transposing-an-Array-3.3.3\"><span class=\"toc-item-num\">3.3.3&nbsp;&nbsp;</span>Transposing an Array</a></span></li><li><span><a href=\"#Flattening-an-Array\" data-toc-modified-id=\"Flattening-an-Array-3.3.4\"><span class=\"toc-item-num\">3.3.4&nbsp;&nbsp;</span>Flattening an Array</a></span></li></ul></li></ul></li><li><span><a href=\"#Array-Computation\" data-toc-modified-id=\"Array-Computation-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Array Computation</a></span><ul class=\"toc-item\"><li><span><a href=\"#Vectorization\" data-toc-modified-id=\"Vectorization-4.1\"><span class=\"toc-item-num\">4.1&nbsp;&nbsp;</span>Vectorization</a></span></li><li><span><a href=\"#Universal-Functions\" data-toc-modified-id=\"Universal-Functions-4.2\"><span class=\"toc-item-num\">4.2&nbsp;&nbsp;</span>Universal Functions</a></span><ul class=\"toc-item\"><li><span><a href=\"#Single-Array---Examples\" data-toc-modified-id=\"Single-Array---Examples-4.2.1\"><span class=\"toc-item-num\">4.2.1&nbsp;&nbsp;</span>Single Array - Examples</a></span></li><li><span><a href=\"#Multiple-Arrays---Examples\" data-toc-modified-id=\"Multiple-Arrays---Examples-4.2.2\"><span class=\"toc-item-num\">4.2.2&nbsp;&nbsp;</span>Multiple Arrays - Examples</a></span><ul class=\"toc-item\"><li><span><a href=\"#Matrix-Multiplication\" data-toc-modified-id=\"Matrix-Multiplication-4.2.2.1\"><span class=\"toc-item-num\">4.2.2.1&nbsp;&nbsp;</span>Matrix Multiplication</a></span></li></ul></li></ul></li><li><span><a href=\"#Broadcasting\" data-toc-modified-id=\"Broadcasting-4.3\"><span class=\"toc-item-num\">4.3&nbsp;&nbsp;</span>Broadcasting</a></span></li><li><span><a href=\"#Comparison-Operators\" data-toc-modified-id=\"Comparison-Operators-4.4\"><span class=\"toc-item-num\">4.4&nbsp;&nbsp;</span>Comparison Operators</a></span></li><li><span><a href=\"#Boolean-Arrays\" data-toc-modified-id=\"Boolean-Arrays-4.5\"><span class=\"toc-item-num\">4.5&nbsp;&nbsp;</span>Boolean Arrays</a></span><ul class=\"toc-item\"><li><span><a href=\"#Working-with-Boolean-Arrays\" data-toc-modified-id=\"Working-with-Boolean-Arrays-4.5.1\"><span class=\"toc-item-num\">4.5.1&nbsp;&nbsp;</span>Working with Boolean Arrays</a></span></li><li><span><a href=\"#Boolean-Operators\" data-toc-modified-id=\"Boolean-Operators-4.5.2\"><span class=\"toc-item-num\">4.5.2&nbsp;&nbsp;</span>Boolean Operators</a></span></li><li><span><a href=\"#Boolean-Masks\" data-toc-modified-id=\"Boolean-Masks-4.5.3\"><span class=\"toc-item-num\">4.5.3&nbsp;&nbsp;</span>Boolean Masks</a></span></li></ul></li></ul></li><li><span><a href=\"#Plotting-Arrays\" data-toc-modified-id=\"Plotting-Arrays-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>Plotting Arrays</a></span><ul class=\"toc-item\"><li><span><a href=\"#Simple-Plots\" data-toc-modified-id=\"Simple-Plots-5.1\"><span class=\"toc-item-num\">5.1&nbsp;&nbsp;</span>Simple Plots</a></span><ul class=\"toc-item\"><li><span><a href=\"#Line-Plot\" data-toc-modified-id=\"Line-Plot-5.1.1\"><span class=\"toc-item-num\">5.1.1&nbsp;&nbsp;</span>Line Plot</a></span></li><li><span><a href=\"#Histogram\" data-toc-modified-id=\"Histogram-5.1.2\"><span class=\"toc-item-num\">5.1.2&nbsp;&nbsp;</span>Histogram</a></span></li><li><span><a href=\"#Scatter-Plot\" data-toc-modified-id=\"Scatter-Plot-5.1.3\"><span class=\"toc-item-num\">5.1.3&nbsp;&nbsp;</span>Scatter Plot</a></span></li><li><span><a href=\"#Bar-Plot\" data-toc-modified-id=\"Bar-Plot-5.1.4\"><span class=\"toc-item-num\">5.1.4&nbsp;&nbsp;</span>Bar Plot</a></span></li></ul></li><li><span><a href=\"#Subplots\" data-toc-modified-id=\"Subplots-5.2\"><span class=\"toc-item-num\">5.2&nbsp;&nbsp;</span>Subplots</a></span></li><li><span><a href=\"#2-D-Array-as-an-Image\" data-toc-modified-id=\"2-D-Array-as-an-Image-5.3\"><span class=\"toc-item-num\">5.3&nbsp;&nbsp;</span>2-D Array as an Image</a></span></li><li><span><a href=\"#3-D-Surface-Plots\" data-toc-modified-id=\"3-D-Surface-Plots-5.4\"><span class=\"toc-item-num\">5.4&nbsp;&nbsp;</span>3-D Surface Plots</a></span></li></ul></li><li><span><a href=\"#Conclusion\" data-toc-modified-id=\"Conclusion-6\"><span class=\"toc-item-num\">6&nbsp;&nbsp;</span>Conclusion</a></span></li><li><span><a href=\"#References\" data-toc-modified-id=\"References-7\"><span class=\"toc-item-num\">7&nbsp;&nbsp;</span>References</a></span></li></ul></div>"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Introduction to NumPy"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__[NumPy](https://numpy.org/)__, short for Numerical Python, is the core library for scientific computing in Python. It has been designed specifically for performing basic and advanced array operations. It primarily supports multi-dimensional arrays and vectors for complex arithmetic operations. Here are some things you will find in NumPy:\n", "\n", "1. `ndarray`, an efficient multidimensional array object providing fast array-oriented arithmetic operations and flexible broadcasting capabilities.\n", "\n", "2. Mathematical functions for fast operations on entire arrays of data without having to write loops.\n", "\n", "3. Tools for reading/writing array data to disk and working with memory-mapped files.\n", "\n", "4. Linear algebra, random number generation, and Fourier transform capabilities.\n", "\n", "\n", "NumPy arrays form the core of nearly the entire ecosystem of data science tools in Python. They provide:\n", "\n", "- Efficient storage and data operations as they use much less memory than built-in Python sequences. \n", "- Ability to perform complex computations on large blocks of data without the need for using Python for loops.\n", "- Performance as arrays are much faster than Python core library provided [Lists](https://docs.python.org/3/tutorial/introduction.html#lists).\n", "\n", "NumPy by itself does not provide modeling or scientific functionality, but an understanding of NumPy arrays and array-oriented computing will help you use tools, such as pandas, much more effectively."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Installation and Import"]}, {"cell_type": "markdown", "metadata": {}, "source": ["A typical installation of Python API comes with Numpy. You can use `pip` or `conda` to install it."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": ["# conda install numpy\n", "# pip install numpy"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Once NumPy is installed, you can import it as:"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["import numpy as np"]}, {"cell_type": "markdown", "metadata": {}, "source": ["You can also check the version of NumPy that is installed:"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/plain": ["'1.18.5'"]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["np.__version__"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Creating Arrays"]}, {"cell_type": "markdown", "metadata": {}, "source": ["One of the key features of NumPy is its N-dimensional array object `ndarray`. An `ndarray` is a generic multidimensional container for homogeneous data; that is, all of the elements in the array must be the same type. So, an array is like a grid of values, all of the same type. The values in an array are indexed by a tuple of nonnegative integers."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Creating N-dimensional Array\n", "\n", "\n", "The easiest way to create an array is to use the `array` function. We can initialize numpy arrays from Python lists. Let's create one, two, and three dimensional arrays using lists."]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 2, 3, 6, 7])"]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["# Create one-dimensional array\n", "data1 = [1,2,3,6,7]\n", "arr1 = np.array(data1)\n", "arr1"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["2D array:\n", " [[ 1  2  3  6]\n", " [ 2  6  9 11]]\n", "\n", "\n", "3D array:\n", " [[[1 2]\n", "  [3 4]]\n", "\n", " [[5 6]\n", "  [7 8]]]\n"]}], "source": ["# Create two and three dimensional arrays\n", "data2 = [[1,2,3,6], [2,6,9,11]]\n", "data3 = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]\n", "\n", "arr2 = np.array(data2)\n", "arr3 = np.array(data3)\n", "\n", "print('2D array:\\n', arr2)\n", "print('\\n')\n", "print('3D array:\\n', arr3)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Creating arrays using random number generator"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We can also generate arrays using NumPy's random number generator. Numpy's `np.random` module contains `rand`, `randn` and `randint` functions that can be used to generate different random numbers from different distributions.\n", "\n", "- `rand` - generates random samples from [uniform distribution](https://en.wikipedia.org/wiki/Continuous_uniform_distribution) between 0 and 1. We specify the shape of the resulting array we want.\n", "- `randn` - generates random samples from [normal distribution](https://en.wikipedia.org/wiki/Normal_distribution) with mean 0 and standard deviation 1. We specify the shape of the resulting array we want.\n", "- `randint` - generates random integers from a given low and high value range. We specify the min and max values for random number generation and also the shape of the resulting array we want."]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's create a 2-D array using `rand`."]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[0.80668187, 0.04487517, 0.05382909, 0.79854817],\n", "       [0.64946385, 0.8975755 , 0.79676167, 0.53641035]])"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["# Arrays using rand\n", "r1 = np.random.rand(2,4)\n", "r1"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Now, let's create a 3-D array using `randn`."]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[[ 0.76102009, -1.40584035],\n", "        [-1.29607784,  0.27082671],\n", "        [-0.32464382, -0.46424713]],\n", "\n", "       [[-2.13802959,  1.05216567],\n", "        [-0.37643712,  0.45702234],\n", "        [-0.74756525,  0.1225769 ]]])"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["# Arrays using rand\n", "r2 = np.random.randn(2,3,2)\n", "r2"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's create a 2-D array of random integers between 2 and 10 using `randint`."]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[2, 9, 7, 6],\n", "       [6, 3, 3, 6]])"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["r3 = np.random.randint(2,10, size=(2, 4))  # Two-dimensional array\n", "r3"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Attibutes of a NumPy Array\n", "\n", "Each array has attributes such as:\n", "- `ndim` (the number of dimensions)\n", "- `shape` (the size of each dimension)\n", "- `size` (the total size of the array)\n", "- `dtype` (the data type of the array)\n", "\n", "Let's look at each of these attributes. We will use array __r2__ defined above to check these attributes. These attributes are extremely useful and come in handy during the _data exploration_ phase of a project."]}, {"cell_type": "markdown", "metadata": {}, "source": ["`ndim`: Number of dimensions"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"text/plain": ["3"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["r2.ndim"]}, {"cell_type": "markdown", "metadata": {}, "source": ["`shape`: Size of each dimension"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": ["(2, 3, 2)"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["r2.shape"]}, {"cell_type": "markdown", "metadata": {}, "source": ["`size`: Total number of elements in the array"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["12"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["r2.size"]}, {"cell_type": "markdown", "metadata": {}, "source": ["`dtype`: Data type of the array"]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["dtype('float64')"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["r2.dtype"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Navigating Arrays"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Elements of an array can be accessed in multiple ways. We can use `[]` to access individual elements on an array. We can also use slice notation, marked by the colon (:) character to access subarrays. Indexing and slicing of NumPy arrays is very similar to Python [Lists](https://docs.python.org/3/tutorial/datastructures.html)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Array Indexing - Accessing Single Elements\n", "\n", "In a one-dimensional array, the value can be accessed by specifying the desired index. In a multi-dimensional array, value can be accessed using a comma-separated indices. We will use arrays defined above to look at some examples."]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["1D array:\n", " [1 2 3 6 7]\n", "2D array:\n", " [[ 1  2  3  6]\n", " [ 2  6  9 11]]\n", "3D array:\n", " [[[1 2]\n", "  [3 4]]\n", "\n", " [[5 6]\n", "  [7 8]]]\n"]}], "source": ["# Print arrays\n", "print('1D array:\\n', arr1)\n", "print('2D array:\\n', arr2)\n", "print('3D array:\\n', arr3)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### One-dimensional Array"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/plain": ["1"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["# Access value at index 0\n", "arr1[0]"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"text/plain": ["3"]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["# Access value at index 2\n", "arr1[2]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["To index from the end of the array, you can use negative indices."]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"data": {"text/plain": ["7"]}, "execution_count": 16, "metadata": {}, "output_type": "execute_result"}], "source": ["arr1[-1]"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"text/plain": ["3"]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["arr1[-3]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Multi-dimensional Array\n", "\n", "In a multi-dimensional array, the elements at each index are no longer scalars but rather sub-arrays. Elements of a multi-dimensional array can be accessed using a comma-separated list of indices. If you omit later indices, the returned object will be a sub-array. Let's take a look."]}, {"cell_type": "markdown", "metadata": {}, "source": ["__2-D Array__"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[ 1,  2,  3,  6],\n", "       [ 2,  6,  9, 11]])"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["# Print array\n", "arr2"]}, {"cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 2, 3, 6])"]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["# Access value at index [0]\n", "arr2[0]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Accessing $0^{th}$ index resulted in a sub-array at index 0. To access a specific element, we can pass a list of indices."]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [{"data": {"text/plain": ["1"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["# Access value at index [0,0]\n", "arr2[0,0]"]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [{"data": {"text/plain": ["9"]}, "execution_count": 21, "metadata": {}, "output_type": "execute_result"}], "source": ["# Access value at index [1,2]\n", "arr2[1,2]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__3-D Array__"]}, {"cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[[1, 2],\n", "        [3, 4]],\n", "\n", "       [[5, 6],\n", "        [7, 8]]])"]}, "execution_count": 22, "metadata": {}, "output_type": "execute_result"}], "source": ["# Print array\n", "arr3"]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1, 2],\n", "       [3, 4]])"]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["# Access value at index [0]\n", "arr3[0]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Accessing $0^{th}$ index resulted in a sub-array at index 0. To access a specific element, we can pass a list of indices."]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [{"data": {"text/plain": ["4"]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["# Access a specific element\n", "arr3[0,1,1]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Array Slicing\n", "We can use slice notation, marked by the colon (:) character to access sub-arrays of `ndarrays`. To access a slice of an array x, we can use the NumPy slicing syntax `x[start:stop:slice]`. Let's look at accessing sub-arrays in one dimension and in multiple dimensions."]}, {"cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["1D array:\n", " [1 2 3 6 7]\n", "2D array:\n", " [[ 1  2  3  6]\n", " [ 2  6  9 11]]\n", "3D array:\n", " [[[1 2]\n", "  [3 4]]\n", "\n", " [[5 6]\n", "  [7 8]]]\n"]}], "source": ["# Print arrays\n", "print('1D array:\\n', arr1)\n", "print('2D array:\\n', arr2)\n", "print('3D array:\\n', arr3)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### One-dimensional Array"]}, {"cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 2, 3])"]}, "execution_count": 26, "metadata": {}, "output_type": "execute_result"}], "source": ["# first three elements\n", "arr1[:3]"]}, {"cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([3, 6, 7])"]}, "execution_count": 27, "metadata": {}, "output_type": "execute_result"}], "source": ["# elements after index 2\n", "arr1[2:]"]}, {"cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([2, 3, 6])"]}, "execution_count": 28, "metadata": {}, "output_type": "execute_result"}], "source": ["# middle sub-array\n", "arr1[1:4]"]}, {"cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 3, 7])"]}, "execution_count": 29, "metadata": {}, "output_type": "execute_result"}], "source": ["# every other element\n", "arr1[::2]"]}, {"cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([7, 6, 3, 2, 1])"]}, "execution_count": 30, "metadata": {}, "output_type": "execute_result"}], "source": ["# all elements reversed\n", "arr1[::-1]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Multi-dimensional Array\n", "\n", "Slices in a multi-dimensional array can be accessed using a comma-separated list of indices. If you omit later indices, the returned object will be a sub-array. Let's take a look."]}, {"cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[ 1,  2,  3,  6],\n", "       [ 2,  6,  9, 11]])"]}, "execution_count": 31, "metadata": {}, "output_type": "execute_result"}], "source": ["# Print data\n", "arr2"]}, {"cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1, 2],\n", "       [2, 6]])"]}, "execution_count": 32, "metadata": {}, "output_type": "execute_result"}], "source": ["# two rows, two columns\n", "arr2[:2, :2]"]}, {"cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1, 3],\n", "       [2, 9]])"]}, "execution_count": 33, "metadata": {}, "output_type": "execute_result"}], "source": ["# all rows, every other column\n", "arr2[:, ::2]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Indexing and Slicing can be combined to access single rows or columns on an array. "]}, {"cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 2, 3, 6])"]}, "execution_count": 34, "metadata": {}, "output_type": "execute_result"}], "source": ["# first row\n", "arr2[0, :]"]}, {"cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 2])"]}, "execution_count": 35, "metadata": {}, "output_type": "execute_result"}], "source": ["# first column\n", "arr2[:, 0]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Reshaping Arrays\n", "\n", "Arrays can be converted from one shape to another without copying any data. To do this, we can pass a tuple indicating the new shape to the `reshape` array instance method. By reshaping an array, we can add or remove dimensions or change the number of elements in each dimension. Let's take a look."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### One-dimensional Array"]}, {"cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Array: [1 2 3 6 7]\n", "Shape of array: (5,)\n"]}], "source": ["# Print array and its shape\n", "print('Array:', arr1)\n", "print('Shape of array:', arr1.shape)"]}, {"cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1, 2, 3, 6, 7]])"]}, "execution_count": 37, "metadata": {}, "output_type": "execute_result"}], "source": ["# Reshape 1-D array into 1 row and 5 columns\n", "arr1.reshape(1,5)"]}, {"cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [{"data": {"text/plain": ["(1, 5)"]}, "execution_count": 38, "metadata": {}, "output_type": "execute_result"}], "source": ["# Print shape after reshaping\n", "arr1.reshape(1,5).shape"]}, {"cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1],\n", "       [2],\n", "       [3],\n", "       [6],\n", "       [7]])"]}, "execution_count": 39, "metadata": {}, "output_type": "execute_result"}], "source": ["# Reshape 1-D array into 5 rows and 1 column\n", "arr1.reshape(5,1)"]}, {"cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [{"data": {"text/plain": ["(5, 1)"]}, "execution_count": 40, "metadata": {}, "output_type": "execute_result"}], "source": ["# Print shape after reshaping\n", "arr1.reshape(5,1).shape"]}, {"cell_type": "markdown", "metadata": {}, "source": ["When reshaping, the size of the reshaped array must match the total number of elements in the actual array. For example, an array of 5 elements cannot be reshaped to (2,3) or (3,2) arrays. When this computation is performed, an error will be generated as shown."]}, {"cell_type": "markdown", "metadata": {}, "source": ["<img src=''>"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The error shows that an array of size 5 `arr1` cannot be reshaped into an array of size 6 (2 x 3)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Multi-dimensional Array"]}, {"cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Array:\n", " [[ 0  1]\n", " [ 2  3]\n", " [ 4  5]\n", " [ 6  7]\n", " [ 8  9]\n", " [10 11]]\n", "Shape of array: (6, 2)\n"]}], "source": ["# Create data\n", "arr = np.arange(12).reshape((6, 2))\n", "print('Array:\\n', arr)\n", "print('Shape of array:', arr.shape)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Reshape__ the array to shape (4,3)"]}, {"cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[ 0,  1,  2],\n", "       [ 3,  4,  5],\n", "       [ 6,  7,  8],\n", "       [ 9, 10, 11]])"]}, "execution_count": 42, "metadata": {}, "output_type": "execute_result"}], "source": ["# 4 rows and 3 columns\n", "arr.reshape(4,3)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Transposing an Array\n", "__Transposing__ is a special form of reshaping that swaps the axes. To transpose an array, simply use the `T` attribute of an array object."]}, {"cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[ 0,  2,  4,  6,  8, 10],\n", "       [ 1,  3,  5,  7,  9, 11]])"]}, "execution_count": 43, "metadata": {}, "output_type": "execute_result"}], "source": ["# Transpose of array\n", "arr.T"]}, {"cell_type": "markdown", "metadata": {}, "source": ["`arr` is of shape (6,2). Transposing this array swaps the axes to return a shape of (2,6)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Flattening an Array\n", "The opposite operation of reshape from one-dimensional to a higher dimension is typically known as flattening."]}, {"cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])"]}, "execution_count": 44, "metadata": {}, "output_type": "execute_result"}], "source": ["# Flatten array\n", "arr.flatten()"]}, {"cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [{"data": {"text/plain": ["(12,)"]}, "execution_count": 45, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check shape\n", "arr.flatten().shape"]}, {"cell_type": "markdown", "metadata": {}, "source": ["`arr` of shape (6,2) is flattened to return a shape of (12,)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Array Computation"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Vectorization"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Computation on __NumPy__ arrays can be very fast, or it can be very slow, and the key to making it fast, is to use __Vectorization__. The practice of replacing explicit loops with array expressions is commonly referred to as vectorization. In NumPy arrays, this is accomplished by simply performing an operation on the array, which will then be applied to each element. Vectorized operations will often be one or two (or more) orders of magnitude faster than their pure Python equivalents. Let's look at an example.\n", "\n", "Imagine we have an array of values and would like to compute the sum of values. A straightforward approach using explicit loops might look like this:"]}, {"cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["CPU times: user 228 ms, sys: 3.68 ms, total: 231 ms\n", "Wall time: 230 ms\n"]}, {"data": {"text/plain": ["499999500000"]}, "execution_count": 46, "metadata": {}, "output_type": "execute_result"}], "source": ["%%time\n", "# Sum using loops\n", "total = 0\n", "for i in np.arange(1000000):\n", "    total += i\n", "total"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Python is unable to take advantage of the fact that the array\u2019s contents are all of a single data type. It first examines the object's type and does a dynamic lookup of the correct function to use for that type, which slows down the computation massively.\n", "\n", "Recall that NumPy\u2019s `ndarray` are homogeneous: an array can only contain data of a single type. NumPy takes advantage of the fact and delegates the task of performing mathematical operations on the array\u2019s contents to optimized, compiled code. The result is a tremendous speedup over the explicit loops in Python.\n", "\n", "Let's use the vectorized function `np.sum()` and time how long it takes to run the computation."]}, {"cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["CPU times: user 2.87 ms, sys: 3.2 ms, total: 6.07 ms\n", "Wall time: 4.65 ms\n"]}, {"data": {"text/plain": ["499999500000"]}, "execution_count": 47, "metadata": {}, "output_type": "execute_result"}], "source": ["%%time\n", "np.sum(np.arange(1000000))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The computation is over 50 times faster when performed using NumPy\u2019s vectorized function. So, when computational efficiency is important, one should avoid performing explicit for-loops in Python. NumPy provides a whole suite of vectorized functions called universal functions, or *ufunc*, that perform element-wise operations on data in `ndarray`s."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Universal Functions\n", "A universal function \"*ufunc*\" is a function that performs element-wise operations on data in ndarrays. *ufuncs* exist in two flavors: \n", "- Unary ufuncs: operate on a single input\n", "- Binary ufuncs: operate on two inputs\n", "\n", "A complete list of NumPy universal functions can be found [here](https://numpy.org/doc/stable/reference/ufuncs.html#available-ufuncs). Let's look at some examples of *ufuncs*."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Single Array - Examples\n", "\n", "The examples illustrate universal functions being applied to a single array."]}, {"cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([2, 3, 4, 5, 6, 7])"]}, "execution_count": 48, "metadata": {}, "output_type": "execute_result"}], "source": ["# Create array\n", "arr1 = np.arange(2,8)\n", "arr1"]}, {"cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Addition        : [4 5 6 7 8 9]\n", "Multiplication  : [ 4  6  8 10 12 14]\n", "Exponentiation  : [ 4  9 16 25 36 49]\n", "Square Root     : [1.41421356 1.73205081 2.         2.23606798 2.44948974 2.64575131]\n", "ln(x)           : [0.69314718 1.09861229 1.38629436 1.60943791 1.79175947 1.94591015]\n", "log2(x)         : [1.         1.5849625  2.         2.32192809 2.5849625  2.80735492]\n", "Exponential(e^x): [   7.3890561    20.08553692   54.59815003  148.4131591   403.42879349\n", " 1096.63315843]\n", "2^x             : [  4.   8.  16.  32.  64. 128.]\n", "Minimum         : 2\n", "Maximum         : 7\n", "Mean            : 4.5\n", "St.Deviation    : 1.707825127659933\n", "Sum of elements : 27\n"]}], "source": ["# Univariate Operations\n", "print('Addition        :', np.add(arr1,2))\n", "print('Multiplication  :', np.multiply(arr1,2))\n", "print('Exponentiation  :', np.power(arr1,2))\n", "print('Square Root     :', np.sqrt(arr1))\n", "print(\"ln(x)           :\", np.log(arr1))\n", "print(\"log2(x)         :\", np.log2(arr1))\n", "print(\"Exponential(e^x):\", np.exp(arr1))\n", "print(\"2^x             :\", np.exp2(arr1))\n", "print(\"Minimum         :\", np.min(arr1))\n", "print(\"Maximum         :\", np.max(arr1))\n", "print(\"Mean            :\", np.mean(arr1))\n", "print(\"St.Deviation    :\", np.std(arr1))\n", "print(\"Sum of elements :\", np.sum(arr1))"]}, {"cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Array:          [-6 -5 -4 -3 -2 -1]\n", "Absolute value: [6 5 4 3 2 1]\n"]}], "source": ["arr2 = np.arange(-6,0)\n", "print('Array:         ', arr2)\n", "print('Absolute value:', np.abs(arr2))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Multiple Arrays - Examples\n", "\n", "The examples illustrate universal functions being applied to more than one array."]}, {"cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Array 1: [2 3 4 5 6 7]\n", "Array 2: [-6 -5 -4 -3 -2 -1]\n"]}], "source": ["print('Array 1:', arr1)\n", "print('Array 2:', arr2)"]}, {"cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Addition        : [-4 -2  0  2  4  6]\n", "Multiplication  : [-12 -15 -16 -15 -12  -7]\n", "Division        : [-0.33333333 -0.6        -1.         -1.66666667 -3.         -7.        ]\n", "Floor Division  : [-1 -1 -1 -2 -3 -7]\n"]}], "source": ["# Bivariate Operations\n", "print('Addition        :', np.add(arr1, arr2))\n", "print('Multiplication  :', np.multiply(arr1,arr2))\n", "print('Division        :', np.divide(arr1,arr2))\n", "print('Floor Division  :', np.floor_divide(arr1,arr2))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["##### Matrix Multiplication\n", "The `dot` function is used to compute inner products of vectors, to multiply a vector by a matrix, and to multiply matrices."]}, {"cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": ["# Create Matrix\n", "x = np.array([[1,2],[3,4],[6,5]])\n", "y = np.array([[5,4,5],[6,8,7]])\n", "\n", "# Create Vector\n", "v = np.array([9,10])\n", "w = np.array([11, 12])"]}, {"cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Matrix x:\n", " [[1 2]\n", " [3 4]\n", " [6 5]]\n", "Shape of matrix x: (3, 2)\n", "\n", "Matrix y:\n", " [[5 4 5]\n", " [6 8 7]]\n", "Shape of matrix y: (2, 3)\n", "\n", "Vector v:\n", " [ 9 10]\n", "Shape of vector v: (2,)\n", "\n", "Vector w:\n", " [11 12]\n", "Shape of vector w: (2,)\n"]}], "source": ["# Print arrays and their shapes\n", "print('Matrix x:\\n', x)\n", "print('Shape of matrix x:', x.shape)\n", "print()\n", "print('Matrix y:\\n', y)\n", "print('Shape of matrix y:', y.shape)\n", "print()\n", "print('Vector v:\\n', v)\n", "print('Shape of vector v:', v.shape)\n", "print()\n", "print('Vector w:\\n', w)\n", "print('Shape of vector w:', w.shape)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Inner product of vectors__"]}, {"cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["219\n"]}], "source": ["# Inner product of vectors\n", "print(np.dot(v, w))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The result shows dot product between a one-dimensional array with another one-dimensional array which returns a scalar."]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Matrix - vector product__"]}, {"cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[ 29  67 104]\n"]}], "source": ["# Matrix / vector product\n", "print(np.dot(x, v))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The result shows dot product between a two-dimensional array of shape (3,2) with a one-dimensional array which returns a one-dimensional array."]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Matrix - matrix product__"]}, {"cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[[17 20 19]\n", " [39 44 43]\n", " [60 64 65]]\n"]}], "source": ["# Matrix / matrix product\n", "print(np.dot(x, y))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The result shows dot product between a two-dimensional array of shape (3,2) with another two-dimensional array of shape (2,3) which returns a two-dimensional array of shape(3,3)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Broadcasting"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Broadcasting__ is a powerful mechanism that describes how arithmetic works between arrays of different shapes. It is simply a set of rules for applying __binary ufuncs__ (e.g., addition, subtraction, multiplication, etc.) on arrays of different sizes. Broadcasting provides another way of utilizing  NumPy's vectorized operations on arrays. \n", "\n", "You can read more about Broadcasting [here](https://numpy.org/doc/stable/user/basics.broadcasting.html#general-broadcasting-rules). Let's look at some examples."]}, {"cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Array 1: [0 1 2]\n", "Shape of Array 1: (3,)\n", "\n", "Array 2: [[3 0 3]]\n", "Shape of Array 2: (1, 3)\n", "\n", "Array 3: [[4]\n", " [1]\n", " [0]]\n", "Shape of Array 3: (3, 1)\n"]}], "source": ["# Create Data\n", "arr1 = np.arange(3)\n", "arr2 = np.random.randint(5, size=3).reshape((1,3))\n", "arr3 = np.random.randint(5, size=3).reshape((3,1))\n", "print('Array 1:', arr1)\n", "print ('Shape of Array 1:', arr1.shape)\n", "print()\n", "print('Array 2:', arr2)\n", "print ('Shape of Array 2:', arr2.shape)\n", "print()\n", "print('Array 3:', arr3)\n", "print ('Shape of Array 3:', arr3.shape)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Add scalar to an array:__"]}, {"cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([3, 4, 5])"]}, "execution_count": 59, "metadata": {}, "output_type": "execute_result"}], "source": ["arr1 + 3"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We can think of this as an operation that stretches or duplicates the value 3 into the array [3, 3, 3], and adds the results. The advantage of NumPy's broadcasting is that this duplication does not actually take place, but it is a useful mental model as we think about broadcasting.\n", "\n", "We can similarly extend this to arrays of higher dimension. "]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Add two arrays:__"]}, {"cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[[3 1 5]]\n", "Shape of x: (1, 3)\n"]}], "source": ["x = arr1 + arr2\n", "print(x)\n", "print('Shape of x:', x.shape)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Multiply two arrays:__"]}, {"cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[[0 4 8]\n", " [0 1 2]\n", " [0 0 0]]\n", "Shape of y: (3, 3)\n"]}], "source": ["y = arr1 * arr3\n", "print(y)\n", "print('Shape of y:', y.shape)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["When multiplying `aar1` of shape (1,3) with `arr3` of shape (3,1), the broadcasting operation returns a (3,3) array."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Comparison Operators\n", "\n", "With Broadcasting, we saw that using arithmatic operators such as `+, -, *, /` and others on arrays leads to element-wise operations. NumPy also implements various comparison operators such as `<`(less than), `>` (greater than) and others as element-wise _ufuncs_. The result of these comparison operators is an array with a Boolean data type. "]}, {"cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([0, 1, 2, 3, 4])"]}, "execution_count": 62, "metadata": {}, "output_type": "execute_result"}], "source": ["# Create data\n", "arr = np.arange(5)\n", "arr"]}, {"cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Less than            : [ True  True False False False]\n", "Greater than         : [False False False  True  True]\n", "Less than or equal   : [ True  True  True False False]\n", "Greater than or equal: [False False  True  True  True]\n", "Not equal            : [ True  True False  True  True]\n", "Equal                : [False False  True False False]\n"]}], "source": ["# Comparison Operators\n", "print('Less than            :', arr < 2)\n", "print('Greater than         :', arr > 2)\n", "print('Less than or equal   :', arr <= 2)\n", "print('Greater than or equal:', arr >= 2)\n", "print(\"Not equal            :\", arr != 2)\n", "print(\"Equal                :\", arr == 2)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Boolean Arrays\n", "\n", "A number of useful operations can be applied to the boolean arrays to get informative results."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Working with Boolean Arrays\n", "\n", "Let's say we want to know if an array has _any_ values less than 5 or _how many_ values in the array are greater than 5. Once we have a boolean array, we can easily apply various NumPy operations to get the results. \n", "\n", "Let's look at some examples. We will set a seed value to ensure that the same random arrays are generated every time."]}, {"cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1, 6, 7, 9],\n", "       [8, 4, 8, 5]])"]}, "execution_count": 64, "metadata": {}, "output_type": "execute_result"}], "source": ["np.random.seed(101)\n", "arr = np.random.randint(10, size=(2,4))\n", "arr"]}, {"cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[ True, False, False, False],\n", "       [False,  True, False, False]])"]}, "execution_count": 65, "metadata": {}, "output_type": "execute_result"}], "source": ["# Apply comparison operator\n", "arr < 5"]}, {"cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [{"data": {"text/plain": ["True"]}, "execution_count": 66, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check if any value in array in less than 5\n", "np.any(arr < 5)"]}, {"cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [{"data": {"text/plain": ["5"]}, "execution_count": 67, "metadata": {}, "output_type": "execute_result"}], "source": ["# Count of values that are greater than 5\n", "np.sum(arr > 5)"]}, {"cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [{"data": {"text/plain": ["True"]}, "execution_count": 68, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check if all values in array are less than 10\n", "np.all(arr < 10)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["`np.all` and `np.any` can be applied along particular axes."]}, {"cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([False, False])"]}, "execution_count": 69, "metadata": {}, "output_type": "execute_result"}], "source": ["# Are all values in each row less than 8?\n", "np.all(arr < 8, axis=1)"]}, {"cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([False, False, False, False])"]}, "execution_count": 70, "metadata": {}, "output_type": "execute_result"}], "source": ["# Is any value in each column greater than 9?\n", "np.any(arr > 9, axis=0)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Boolean Operators\n", "\n", "Now, let's change the question and say we want to know about all the values less than eight and greater than two. This, and other such questions can be answered through Python's bitwise logic operators `&, |, ^, and ~`. Let's look at an example."]}, {"cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[1, 6, 7, 9],\n", "       [8, 4, 8, 5]])"]}, "execution_count": 71, "metadata": {}, "output_type": "execute_result"}], "source": ["# Print data\n", "arr"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Count of values that are less than eight `and` greater than two."]}, {"cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [{"data": {"text/plain": ["4"]}, "execution_count": 72, "metadata": {}, "output_type": "execute_result"}], "source": ["np.sum((arr > 2) & (arr < 8))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Count of values that are greater than eight `or` equal to five."]}, {"cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [{"data": {"text/plain": ["2"]}, "execution_count": 73, "metadata": {}, "output_type": "execute_result"}], "source": ["np.sum((arr > 8) | (arr == 5))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Boolean Masks"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Boolean arrays can be used as __masks__ to select specific subsets of the data. It selects the elements of an array that satisfy some condition where the output is a numpy array of elements for which the condition is satisfied. Let's take a look."]}, {"cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 4])"]}, "execution_count": 74, "metadata": {}, "output_type": "execute_result"}], "source": ["# Find elements in arr that are smaller than 5\n", "arr[arr < 5]"]}, {"cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([9, 8, 8])"]}, "execution_count": 75, "metadata": {}, "output_type": "execute_result"}], "source": ["# Select elements in arr that are bigger than 7\n", "arr[arr > 7]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We are now free to combine various comparison and boolean operators with masks to ask even more complex questions. Let's create two boolean masks from our `arr` array :\n", "1. Mask of values greater than 4\n", "2. Mask of values smaller than 6"]}, {"cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["lessthan6:\n", " [[ True False False False]\n", " [False  True False  True]]\n", "\n", "morethan4:\n", " [[False  True  True  True]\n", " [ True False  True  True]]\n"]}], "source": ["# Create masks\n", "\n", "lessthan6 = arr < 6\n", "print('lessthan6:\\n', lessthan6)\n", "\n", "print()\n", "\n", "morethan4 = arr > 4\n", "print('morethan4:\\n', morethan4)"]}, {"cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [{"data": {"text/plain": ["dtype('bool')"]}, "execution_count": 77, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check data type of a mask\n", "lessthan6.dtype"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Now let's try to answer a few questions starting with getting a __sum__ of all values that are less than 6."]}, {"cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [{"data": {"text/plain": ["10"]}, "execution_count": 78, "metadata": {}, "output_type": "execute_result"}], "source": ["np.sum(arr[lessthan6])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Mean__ of all values that are less than 6."]}, {"cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [{"data": {"text/plain": ["3.3333333333333335"]}, "execution_count": 79, "metadata": {}, "output_type": "execute_result"}], "source": ["np.mean(arr[lessthan6])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["__Minimum__ from the values that are greater than 4."]}, {"cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [{"data": {"text/plain": ["5"]}, "execution_count": 80, "metadata": {}, "output_type": "execute_result"}], "source": ["np.min(arr[morethan4])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["All values that are __not__ greater than 4."]}, {"cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([1, 4])"]}, "execution_count": 81, "metadata": {}, "output_type": "execute_result"}], "source": ["arr[~morethan4]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["All values that are less than 6 __and__ greater than 4."]}, {"cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([5])"]}, "execution_count": 82, "metadata": {}, "output_type": "execute_result"}], "source": ["arr[lessthan6 & morethan4]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Plotting Arrays"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Creating visualizations is one of the most important tasks in data analysis. It is critical to visualize data as part of the exploratory process. [matplotlib](https://matplotlib.org/) is popularly used as the de facto plotting library and it integrates very well with Python. Let's create some plots using arrays."]}, {"cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": ["import matplotlib.pyplot as plt\n", "%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Simple Plots"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Line Plot"]}, {"cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["<Figure size 432x288 with 1 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["data1 = np.arange(10)\n", "\n", "plt.plot(data1)\n", "plt.title('Line Plot'); # ; suppresses print statement"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Histogram"]}, {"cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["<Figure size 432x288 with 1 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["data2 = np.random.randn(100)\n", "\n", "plt.hist(data2, bins=20)\n", "plt.title('Histogram');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Scatter Plot"]}, {"cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEICAYAAABCnX+uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAV30lEQVR4nO3df6zldX3n8edLFrcTsB1YrhQGcChFWgNbxr2l3cVtzKIFu7GMJLqS3RY33Y6baLZkLZWaJtJmDcRfbdM0bsaFgKtSqeCIP7JKYI3astQ7QgFFKlUUhllmqJ0FdklReO8f53vxMt5f59c953Pu85FM7jnf8z3n+/neb+Z1vvf9/Xw+31QVkqR2vWDSDZAkDccgl6TGGeSS1DiDXJIaZ5BLUuMMcklqnEEujUGSK5J8eNLt0OZgkGuikrwiyV8m+T9JvpfkL5L8/JCf+aYkXz5s2bVJ/stwrf2R7Vyb5OkkT3ZtvyXJzwzwOQ8medUo26bNxSDXxCT5ceDTwJ8AxwLbgN8H/mGS7VpOkn+0wkvvrqqjgZOAA8C1G9YoqWOQa5JeClBV11fVM1X1VFV9vqruXlwhyW8muS/JE0m+nuTl3fLLk/ztkuWv65b/LPBfgX/enSkfSrIL+LfA73TLPtWte2KSG5McTPLtJP9pyXavSPLxJB9O8jjwptV2pKr+H/BR4MzlXk/yq0m+1rXnC107SfLfgVOAT3Vt+53BfpXazAxyTdLfAM8kuS7Ja5Ics/TFJK8HrgB+Hfhx4FeBv+te/lvgXwI/Qe8s/sNJTqiq+4D/CNxeVUdX1daq2g18hO7suapem+QFwKeAv6b3l8B5wKVJzl/ShAuBjwNbu/evKMnR9L4s7lzmtZcC1wOXAnPAZ+kF9wur6teA7wKv7dr27rV/bdLzGeSamKp6HHgFUMAHgYNJbk5yfLfKf6AXvl+pngeq6jvde/+8qh6pqmer6mPAN4Fz+tj8zwNzVfUHVfV0VX2ra8Mbl6xze1Xt6bbx1Aqf89tJDgEPAEez/Jn7vwE+U1W3VNX3gfcCW4B/0Ud7pRWtVPeTNkR3Bv0mgO5C4YeBPwIuBk6md+b9I5L8OvCfge3doqOB4/rY9EuAE7sQXnQE8KUlzx9ax+e8t6p+b411TgS+s/ikqp5N8hC9vwSkoRnkmhpV9Y0k1wJv7hY9BJx2+HpJXkLv7Pk8emfNzyS5C8jiRy338Yc9fwj4dlWdvlqT+mj+ah4Bzlp8kiT0vqT2jXg72qQsrWhikvxMkrclOal7fjK9M/H/1a3y3+iVLv5Zen66C/Gj6IXfwe59/57nX2R8FDgpyQsPW/ZTS57/FfB4krcn2ZLkiCRnDtv1cQU3AP86yXlJjgTeRq9nzl+u0DapLwa5JukJ4BeAO5L8X3oBfi+9oKOq/hx4F73eIE8Ae4Bjq+rrwPuA2+mF4FnAXyz53NuArwH/O8lj3bKrgZd1vUb2VNUzwGuBs4FvA4/R++L4iVHvZFXdD/w7et0sH+u2+9qqerpb5Urg97q2/faot6/ZF28sIUlt84xckhpnkEtS4wxySWqcQS5JjdvQfuTHHXdcbd++fSM3KUnN27t372NVNbfS6xsa5Nu3b2dhYWEjNylJzUvyndVet7QiSY0zyCWpcQa5JDXOIJekxhnkktQ4p7GVpD7tuXMf7/nc/Txy6ClO3LqFy84/g507Jje9vEEuSX3Yc+c+fveme3jq+88AsO/QU/zuTfcATCzMLa1IUh/e87n7nwvxRU99/xne87n7J9Qig1yS+vLIoeVv37rS8o2wZmklyY8BXwT+cbf+x6vqnUmOBT5G756JDwJvqKq/H19TJbVq2mrKwzhx6xb2LRPaJ27dMoHW9KznjPwfgH9VVT9H724qFyT5ReBy4Nbunoe3ds8l6XkWa8r7Dj1F8cOa8p4796353ml02flnsOXII563bMuRR3DZ+WdMqEXrCPLqebJ7emT3r4ALgeu65dcBO8fSQklNm8aa8jB27tjGlRedxbatWwiwbesWrrzorOnvtZLkCGAv8NPAn1bVHUmOr6r9AFW1P8mLV3jvLmAXwCmnnDKaVktqxjTWlIe1c8e2qSoNretiZ1U9U1VnAycB5yQ5c633LHnv7qqar6r5ubkVZ2GUNKNWqh1PsqY8a/rqtVJVh4AvABcAjyY5AaD7eWDkrZPUvGmsKc+aNYM8yVySrd3jLcCrgG8ANwOXdKtdAnxyXI2U1K5prCnPmvXUyE8Aruvq5C8AbqiqTye5HbghyW8A3wVeP8Z2SmrYtNWUZ82aQV5VdwM7lln+d8B542iUJGn9HNkpSY0zyCWpcQa5JDXOIJekxjkfuSR1Wp3cyyCXJKbzhhHrZWlFkmh7ci/PyCU9T6vlhWG1PLmXZ+SSnjNrc4f3o+XJvQxySc9pubywkj137uPcq27j1Ms/w7lX3bbil1LLk3tZWpH0nJbLC8vp5wLm4vMWy0oGuaTnTOP9KIex2l8YywV0q5N7WVqR9JyWywvLmbW/MFZikEt6zqzNHd7yBcx+WFqR9DyTLC+MuuvjZeef8bwaObT9F8ZKDHJJU2EcIytbvoDZD4Nc0lTo98LkerV6AbMf1sglTYXNcmFyHAxySVNhs1yYHAeDXNJUmLWujxvJGrmkqbBZLkyOw5pBnuRk4EPATwLPArur6o+TXAH8JnCwW/UdVfXZcTVU0uzbDBcmx2E9Z+Q/AN5WVV9N8iJgb5Jbutf+sKreO77mSZLWsmaQV9V+YH/3+Ikk9wF+ZUrSlOjrYmeS7cAO4I5u0VuT3J3kmiTHrPCeXUkWkiwcPHhwuVUkSUNYd5AnORq4Ebi0qh4HPgCcBpxN74z9fcu9r6p2V9V8Vc3Pzc2NoMmS1I71zoc+jHX1WklyJL0Q/0hV3QRQVY8uef2DwKdH3jpJathG3dB5zTPyJAGuBu6rqvcvWX7CktVeB9w7slZJ0gzYqDsureeM/Fzg14B7ktzVLXsHcHGSs4ECHgTePNKWSVLjNmragfX0WvkykGVess+4JK1io+645BB9SRqTjZp2wCH6kjQmGzXtgEEuSWO0EdMOWFqRpMYZ5JLUOEsrkgYy6hsla3AGuaS+bdSIxbXa4BdJj6UVSX3bqBGLK1n8Itl36CmKH36RjGMekxYY5JL6NukbJU/6i2TaGOSS+jbpGyVP+otk2hjkkvo26RslT/qLZNoY5JL6tnPHNq686Cy2bd1CgG1bt3DlRWdt2MXGSX+RTBt7rUgayCRvlLxRQ99bYZBLatIkv0imjaUVSWqcQS5JjTPIJalxBrkkNc4gl6TGGeSS1DiDXJIat2Y/8iQnAx8CfhJ4FthdVX+c5FjgY8B24EHgDVX19+NrqqTDOZWrYH1n5D8A3lZVPwv8IvCWJC8DLgdurarTgVu755I2iFO5atGaQV5V+6vqq93jJ4D7gG3AhcB13WrXATvH1UhJP8qpXLWorxp5ku3ADuAO4Piq2g+9sAdevMJ7diVZSLJw8ODB4Vor6TlO5apF6w7yJEcDNwKXVtXj631fVe2uqvmqmp+bmxukjZKW4VSuWrSuIE9yJL0Q/0hV3dQtfjTJCd3rJwAHxtNESctxKlctWjPIkwS4Grivqt6/5KWbgUu6x5cAnxx98yStZNJzgmt6pKpWXyF5BfAl4B563Q8B3kGvTn4DcArwXeD1VfW91T5rfn6+FhYWhm2zJG0qSfZW1fxKr6/Zj7yqvgxkhZfPG7RhkqTR8MYS0ibgwKHZZpBLM25x4NBin/PFgUOAYT4jnGtFmnEOHJp9npFLQ2ihZOHAodnnGbk0oFbmOnHg0OwzyKUBtVKycODQ7LO0Ig2olZLFYqln2ktAGpxBLg3oxK1b2LdMaE9jyWLnjm0G9wyztCINqN+SxZ4793HuVbdx6uWf4dyrbpu6Wrra5Rm5NKB+Shb25dY4GeTSENZbsljtwqhBrmFZWpE2QCsXRtUmg1zaAPbl1jgZ5NIGsC+3xskaubQB7MutcTLIpQ1iX26Ni0GuTaOFCa6kQRjk2hTsx61Z5sVObQqtTHAlDcIg16ZgP27NMoNcm4L9uDXL1gzyJNckOZDk3iXLrkiyL8ld3b9fGW8zpeHYj1uzbD1n5NcCFyyz/A+r6uzu32dH2yxptHbu2MaVF53Ftq1bCLBt6xauvOgsL3RqJqzZa6Wqvphk+/ibIo2X/bg1q4apkb81yd1d6eWYlVZKsivJQpKFgwcPDrE5SdJyBg3yDwCnAWcD+4H3rbRiVe2uqvmqmp+bmxtwc9psvAmDtH4DDQiqqkcXHyf5IPDpkbVIm56Dd6T+DHRGnuSEJU9fB9y70rpSvxy8I/VnzTPyJNcDrwSOS/Iw8E7glUnOBgp4EHjzGNuoTcbBO1J/1tNr5eJlFl89hrZIQFt3p5emgSM7NXUcvCP1x9kPNXW8CYPUH4NcU8nBO9L6GeQamjdsGC1/n+qXQa6h2Od7tPx9ahBe7NRQ7PM9Wv4+NQiDXEOxz/do+fvUIAxyDcUbNoyWv08NwiDXUOzzPVr+PjUIL3ZqKPb5Hi1/nxpEqmrDNjY/P18LCwsbtj1JmgVJ9lbV/EqvW1qRpMZZWtGKHJgitcEg17IcmCK1w9KKluXAFKkdBrmW5cAUqR2WVrSslm7uYC1fm51n5FpWKwNTFmv5+w49RfHDWv6eO/dNumnShjHItaydO7Zx5UVnsW3rFgJs27qFKy86a+rOdK3lS5ZWtIoWbu5gLV8yyNW4cdXyrburJWuWVpJck+RAknuXLDs2yS1Jvtn9PGa8zZSWN45avnV3tWY9NfJrgQsOW3Y5cGtVnQ7c2j2X1rTnzn2ce9VtnHr5Zzj3qtuGDsdx1PKtu6s1a5ZWquqLSbYftvhC4JXd4+uALwBvH2G71KcWSgHjGi066lq+dXe1ZtBeK8dX1X6A7ueLV1oxya4kC0kWDh48OODmtJpWSgGtnOl6cwe1ZuzdD6tqd1XNV9X83NzcuDe3KbUSkK2c6bbSh15aNGiQP5rkBIDu54HRNUn9aiUgWznTbaUPvbRo0O6HNwOXAFd1Pz85shapb60Mp7/s/DOeVyOH6T3TbaEPvbRoPd0PrwduB85I8nCS36AX4K9O8k3g1d1zTUgrpQDPdKXx8FZvM6KFXiuSBrPWrd4c2Tkj1lsKMPCl2WOQbyLe9UeaTc5+uIm00k1RUn8M8k2klW6KkvpjkG8irfTjltQfg3wTaaWboqT+eLFzE1m8oGmvFWm2GOSbjCMWpdljaUWSGmeQS1LjDHJJapxBLkmNM8glqXEGuSQ1ziCXpMbZj3xE+pke1qlkJY2SQT4C/UwP61SykkbN0soI9DM9rFPJSho1g3wE+pke1qlkJY2aQT4C/UwP61SykkbNIB+BfqaHdSpZSaM21MXOJA8CTwDPAD9Y7S7Ps6yf6WGdSlbSqKWqBn9zL8jnq+qx9aw/Pz9fCwsLA29PkjajJHtXO1G2tCJJjRs2yAv4fJK9SXYtt0KSXUkWkiwcPHhwyM1Jkg43bJCfW1UvB14DvCXJLx2+QlXtrqr5qpqfm5sbcnOSpMMNFeRV9Uj38wDwCeCcUTRKkrR+Awd5kqOSvGjxMfDLwL2japgkaX2G6X54PPCJJIuf89Gq+h8jadUUcYIrSdNu4CCvqm8BPzfCtkwdJ7iS1AK7H67CCa4ktcAgX4UTXElqgUG+Cie4ktQCg3wVTnAlqQXeIWgVk57gyh4zktbDIF/Dzh3bJhKe9piRtF6WVqaUPWYkrZdBPqXsMSNpvQzyKWWPGUnrZZBPKXvMSFovL3ZOqUn3mJHUDoN8ik2qx4yktlhakaTGzdQZuQNoJG1GMxPkDqCRtFnNTGnFATSSNquZCXIH0EjarGYmyB1AI2mzmpkgdwCNpM1qZi52OoBG0mY1M0EODqCRtDkNVVpJckGS+5M8kOTyUTVKkrR+Awd5kiOAPwVeA7wMuDjJy0bVMEnS+gxzRn4O8EBVfauqngb+DLhwNM2SJK3XMDXybcBDS54/DPzC4Ssl2QXsAjjllFOG2NzoOJRf0iwZ5ow8yyyrH1lQtbuq5qtqfm5ubojNjcbiUP59h56i+OFQ/j137pt00yRpIMME+cPAyUuenwQ8Mlxzxs+h/JJmzTBB/hXg9CSnJnkh8Ebg5tE0a3wcyi9p1gwc5FX1A+CtwOeA+4Abqupro2rYuDiUX9KsGaofeVV9tqpeWlWnVdW7RtWocXIov6RZM1MjO9fDofySZs2mC3JwKL+k2TIzsx9K0mZlkEtS4wxySWrc1NfIHU4vSaub6iBfHE6/OBJzcTg9YJhLUmeqSysOp5ektU11kDucXpLWNtVB7nB6SVrbVAe5w+klaW1TfbHT4fSStLapDnJwOL0krWWqSyuSpLUZ5JLUOINckhpnkEtS4wxySWpcqmrjNpYcBL4z4NuPAx4bYXOmwazt06ztD8zePs3a/sDs7dNy+/OSqppb6Q0bGuTDSLJQVfOTbscozdo+zdr+wOzt06ztD8zePg2yP5ZWJKlxBrkkNa6lIN896QaMwazt06ztD8zePs3a/sDs7VPf+9NMjVyStLyWzsglScswyCWpcU0EeZILktyf5IEkl0+6PcNK8mCSe5LclWRh0u0ZRJJrkhxIcu+SZccmuSXJN7ufx0yyjf1YYX+uSLKvO053JfmVSbaxH0lOTvI/k9yX5GtJfqtb3vIxWmmfmjxOSX4syV8l+etuf36/W973MZr6GnmSI4C/AV4NPAx8Bbi4qr4+0YYNIcmDwHxVNTuIIckvAU8CH6qqM7tl7wa+V1VXdV+4x1TV2yfZzvVaYX+uAJ6sqvdOsm2DSHICcEJVfTXJi4C9wE7gTbR7jFbapzfQ4HFKEuCoqnoyyZHAl4HfAi6iz2PUwhn5OcADVfWtqnoa+DPgwgm3adOrqi8C3zts8YXAdd3j6+j9J2vCCvvTrKraX1Vf7R4/AdwHbKPtY7TSPjWpep7snh7Z/SsGOEYtBPk24KElzx+m4YPXKeDzSfYm2TXpxozQ8VW1H3r/6YAXT7g9o/DWJHd3pZdmyhBLJdkO7ADuYEaO0WH7BI0epyRHJLkLOADcUlUDHaMWgjzLLJvuetDazq2qlwOvAd7S/Vmv6fMB4DTgbGA/8L7JNqd/SY4GbgQurarHJ92eUVhmn5o9TlX1TFWdDZwEnJPkzEE+p4Ugfxg4ecnzk4BHJtSWkaiqR7qfB4BP0CsfzYJHuzrmYj3zwITbM5SqerT7j/Ys8EEaO05d3fVG4CNVdVO3uOljtNw+tX6cAKrqEPAF4AIGOEYtBPlXgNOTnJrkhcAbgZsn3KaBJTmqu1BDkqOAXwbuXf1dzbgZuKR7fAnwyQm2ZWiL/5k6r6Oh49RdSLsauK+q3r/kpWaP0Ur71OpxSjKXZGv3eAvwKuAbDHCMpr7XCkDXneiPgCOAa6rqXRNu0sCS/BS9s3Do3fz6oy3uT5LrgVfSm3LzUeCdwB7gBuAU4LvA66uqiQuIK+zPK+n9uV7Ag8CbF2uX0y7JK4AvAfcAz3aL30GvptzqMVppny6mweOU5J/Su5h5BL2T6huq6g+S/BP6PEZNBLkkaWUtlFYkSaswyCWpcQa5JDXOIJekxhnkktQ4g1ySGmeQS1Lj/j9qZr/IJRMCXgAAAABJRU5ErkJggg==\n", "text/plain": ["<Figure size 432x288 with 1 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["x = np.arange(30)\n", "y = np.arange(30) + 3 * np.random.randn(30)\n", "\n", "plt.scatter(x, y)\n", "plt.title('Scatter Plot');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Bar Plot"]}, {"cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["<Figure size 432x288 with 1 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["data4 = np.random.randint(low=2, high=20, size=5)\n", "x2 = ['a','b','c','d','e']\n", "\n", "plt.bar(x2, data4)\n", "plt.title('Bar Plot');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Subplots\n", "Multiple plots can be added next to each other using [`subplots()`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots.html)."]}, {"cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["<Figure size 1080x576 with 4 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["fig, axes = plt.subplots(2,2, figsize=(15,8))\n", "\n", "axes[0,0].plot(data1)\n", "axes[0,0].set_title('Line Plot')\n", "\n", "axes[0,1].hist(data2, bins=20)\n", "axes[0,1].set_title('Histogram')\n", "\n", "axes[1,0].scatter(x, y)\n", "axes[1,0].set_title('Scatter Plot')\n", "\n", "axes[1,1].bar(x2, data4)\n", "axes[1,1].set_title('Bar Plot');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### 2-D Array as an Image\n", "\n", "Images can be considered as array of dimension (m, n). Let's plot some `ndarrays` as images."]}, {"cell_type": "markdown", "metadata": {}, "source": ["Create a random array of dimension (50, 50) and plot as an image."]}, {"cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["<Figure size 432x288 with 1 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["X = np.random.random((50, 50)) # sample 2D array \n", "\n", "plt.imshow(X, cmap=\"gray\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Create an array of dimension (15,8) and plot as an image."]}, {"cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["<Figure size 432x288 with 2 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["# Create a (15, 8) array\n", "X2 = np.array([[ 0,  0,  0,  0,  0,  0,  0,  0],\n", "               [ 0,  0,  0,  9, 99, 99, 94,  0],\n", "               [ 0,  0,  0, 25, 99, 99, 79,  0],\n", "               [ 0,  0,  0,  0,  0,  0,  0,  0],\n", "               [ 0,  0,  0, 56, 99, 99, 49,  0],\n", "               [ 0,  0,  0, 73, 99, 99, 31,  0],\n", "               [ 0,  0,  0, 91, 99, 99, 13,  0],\n", "               [ 0,  0,  9, 99, 99, 94,  0,  0],\n", "               [ 0,  0, 27, 99, 99, 77,  0,  0],\n", "               [ 0,  0, 45, 99, 99, 59,  0,  0],\n", "               [ 0,  0, 63, 99, 99, 42,  0,  0],\n", "               [ 0,  0, 80, 99, 99, 24,  0,  0],\n", "               [ 0,  1, 96, 99, 99,  6,  0,  0],\n", "               [ 0, 16, 99, 99, 88,  0,  0,  0],\n", "               [ 0,  0,  0,  0,  0,  0,  0,  0]])\n", "\n", "plt.imshow(X2)\n", "plt.colorbar();"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The image displayed is colorful because matplotlib is using the default _colormap_ (a mapping from values in the array to colors). The default colormap in matplotlib is *viridis*, which maps low numbers to purple and high numbers to yellow. The relationship of numbers to colors can be seen using colorbar.\n", "\n", "_colormap_ can be easily changed using the `cmap` argument."]}, {"cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["<Figure size 432x288 with 2 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["plt.imshow(X2, cmap='coolwarm')\n", "plt.colorbar();"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### 3-D Surface Plots\n", "\n", "Various 3-D plots can be created using matplotlib. 3-D plots are enabled by importing the `mplot3d` toolkit. Once this submodule is imported, a three-dimensional axes can be created by passing the keyword `projection='3d'` to any of the normal axes creation. Let's create a 3-D surface plot."]}, {"cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [], "source": ["from mpl_toolkits import mplot3d"]}, {"cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": ["# Make data\n", "X = np.arange(-5, 5, 0.25)\n", "Y = np.arange(-5, 5, 0.25)\n", "X, Y = np.meshgrid(X, Y)\n", "R = np.sqrt(X**2 + Y**2)\n", "Z = np.sin(R)"]}, {"cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcwAAAEeCAYAAAAHLSWiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9eZAkd32n/fzyrqvv6Z7puUcjaUYaSQgBOtjFjjCSeXkJGfli8bFm/cLaLMTaYb/e9RGxAbEvGGxY/Hp5jQ3rZf3KRniXXUyADTZmAS+8CiQwhwCBJKaPme7pu+uuvH/vH9lZXVffVd09M/lETEidlZWZlVmVn/zeQkpJQkJCQkJCwuYoB30ACQkJCQkJ1wOJYCYkJCQkJGyDRDATEhISEhK2QSKYCQkJCQkJ2yARzISEhISEhG2QCGZCQkJCQsI20LZ4Pak5SUhISEi42RCdFiYWZkJCQkJCwjZIBDMhISEhIWEbJIKZkJCQkJCwDRLBTEhISEhI2AaJYCYkJCQkJGyDRDATEnrE/Pw8r3jFK8jlcvz6r//6QR8Ok5OTCCHwff+gDyUh4bokEcyEhDW+9KUv8dBDD9Hf38/Q0BAvf/nLefrpp3e9vQ9+8IOMjIxQLBZ573vf28Uj3ZgvfOELKIpCNpsll8tx++238+EPf3jH23nb297Gz/3cz/XgCBMSrl+2qsNMSLgpKBaLvOY1r+EDH/gAP/3TP43ruvyv//W/ME1zx9uSUiKlZGpqijvuuAMhOpZ09Yzx8XGuXr2KlJJPfOIT/ORP/iT3338/6XR6X48jIeFGI7EwExKA5557DoDXv/71qKpKKpXikUce4e677wbaLa5W9+YP//AP8zu/8zu8/OUvJ51O88//+T/nz/7sz/i93/s9stksf//3f89TTz3Fgw8+yMDAAMeOHeOtb30rruvWt/md73yHhx9+mKGhIcbGxnjnO98JQBiGvOtd7+KWW25heHiYn/7pn2ZlZWXLzySE4LWvfS2Dg4N897vfbXt9dnaWRx99lKGhIc6fP8+HPvQhAD7zmc/wzne+k7/8y78km81yzz337PKsJiTcWCSCmZAA3Hbbbaiqyi/8wi/w6U9/mtXV1R1v4/HHH+eDH/wgpVKJD3/4w/zsz/4s/+bf/BvK5TKvfOUrUVWV973vfSwtLfHkk0/yuc99jj/6oz8CoFQq8cpXvpJXvepVzM7O8sILL/AjP/IjAPzhH/4hf/VXf8UXv/hFZmdnGRwc5C1vecuWxxOGIR//+MfJ5/Pcddddba+//vWv58SJE8zOzvKxj32M3/7t3+Zzn/scr3rVq/jt3/5tXve611Eul/nmN7+543ORkHAjkghmQgLQ19fHl770JYQQvOlNb+LIkSM8+uijzM/Pb3sbb3jDG7jzzjvRNA1d19tev++++3jggQfQNI0zZ87wS7/0S3zxi18E4FOf+hRHjx7l13/917Esi1wux/333w/An/zJn/COd7yDEydOYJomb3vb2/jYxz62YfLO7OwsAwMDjIyM8Pa3v53HH3+c22+/vWmdK1eu8KUvfYl3v/vdWJbFi170It74xjfy+OOPb/vzJiTcbCQxzISENS5evMh/+S//BYDvfe97/NzP/Ry/+qu/yhNPPLGt9588eXLT15977jl+7dd+ja9+9atUq1V83+e+++4DIgG75ZZbOr5vamqKxx57DEVZf75VVZX5+XmOHz/etn4cw9yM2dlZhoaGyOVy9WWnT5/mq1/96qbvS0i4mUkszISEDly4cIE3vOENfPvb3wYgk8lQrVbrr8/NzbW9Z6vknje/+c1cuHCB559/nmKxyDvf+U6kjOYbnDx5kh/84Acd33fy5Ek+/elPk8/n6/9s2+4olttlfHyclZUVSqVSfdn09HR9m/udqJSQcD2QCGZCApFF+d73vrdumV25coUnnniCBx54AIAXvehF/MM//APT09MUCgV+93d/d8f7KJVK9PX1kc1m+d73vscHPvCB+muvec1rmJub4w/+4A9wHIdSqcRXvvIVAH75l3+Z3/md32FqagqAxcVFPvGJT+zp8548eZKHHnqI3/qt38K2bb71rW/xp3/6p/zsz/4sAGNjY0xOThKG4Z72k5BwI5EIZkICkMvl+MpXvsL9999PJpPhgQce4NKlS/X6yYcffpjXve513H333dx333285jWv2fE+3vOe9/CRj3yEXC7Hm970Jl73utc17f+zn/0sn/zkJzl69Ci33norn//85wH4lV/5FR599FEeeeQRcrkcDzzwQF1M98ITTzzB5OQk4+PjPPbYY7z97W/n4YcfBuCnfuqnABgeHubFL37xnveVkHAjIGKX0AYk8zATEhISEm42OsYkkqSfhJsSKSWe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\n", "text/plain": ["<Figure size 576x360 with 1 Axes>"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["# Plot\n", "fig = plt.figure(figsize=(8,5))\n", "ax = plt.axes(projection='3d')\n", "ax.plot_surface(X, Y, Z, rstride=1, cstride=1,\n", "                cmap='coolwarm', edgecolor='none')\n", "ax.set_title('Surface Plot');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Conclusion"]}, {"cell_type": "markdown", "metadata": {}, "source": ["In this part of the guide series we introduced __[NumPy](https://numpy.org/)__, a foundational package for numerical computing in Python. We discussed how N-dimensional arrays `ndarray` can be created and then accessed in multiple ways using indexing and slicing. You have seen in detail how universal functions use the concept of _Vectorization_ to perform element-wise operations on arrays. You were also introduced to the basics of plotting arrays.\n", "\n", "In the next part of this guide series, you will learn about Introduction to [Pandas](https://pandas.pydata.org/)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## References"]}, {"cell_type": "markdown", "metadata": {}, "source": ["[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython (2nd. ed.). O'Reilly Media, Inc.    \n", "    \n", "[2] Jake VanderPlas. 2016. Python Data Science Handbook: Essential Tools for Working with Data (1st. ed.). O'Reilly Media, Inc.    \n", "\n", "[3] Harris, C.R., Millman, K.J., van der Walt, S.J. et al. Array programming with NumPy. Nature 585, 357\u2013362 (2020). https://doi.org/10.1038/s41586-020-2649-2"]}], "metadata": {"anaconda-cloud": {}, "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.10"}, "livereveal": {"scroll": true}, "toc": {"base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {"height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "244px"}, "toc_section_display": true, "toc_window_display": true}}, "nbformat": 4, "nbformat_minor": 2}